// 当前项目包的入口文件

// 封装一个render()函数
// 将render函数挂载到res对象上，可以通过res.render()来访问


// 1.引入http模块
const http = require('http');
const fs = require("fs"); //文件模块
const path = require("path");//路径模块
const url = require("url");//url模块


//mime 模块
const mime = require('mime');



http.createServer(function(req,res){
	// 路由由2中形式组成 请求方式+请求方法
	
	// 将render挂载到res对象上，可以通过res.render()来访问
	res.render=function(filename){
		fs.readFile(filename,(err,data)=>{
		if(err){
			return res.end('404 Not Found!');		
		}else{
			res.setHeader('Content-type',mime.getType(filename));
			res.end(data);
		}
	  });
	}
	
	req.url = req.url.toLowerCase();
	req.method = req.method.toLowerCase();
	
    // 通过url模块,调用url.parse()方法解析用户请求的url(req.url);
	var urlobj = url.parse(req.url,true); // 加了true后，可以把get提交的数据解析为对象，我们可以通过query.title去获取相应的数据
	
	if(req.url.startsWith('/resource')){
		// 这里请求的是静态资源，静态资源直接用请求的路径拼接好
		res.render(path.join(__dirname,req.url));
	}else if(req.url.startsWith('/add') && req.method==='get'){
		// 要获取用户get提交的数据,需要用到url模块(这个模块是node内置的模块)
		// 既然是get提交数据，所以通过req.url
		
		// 1 获取用户get提交过来的新闻数据
		// urlobj.query.title
		// urlobj.query.url
		// urlobj.query.content
		
		// 2 将用户提交的数据保存到data.json文件中，为了每次提交的数据不覆盖之前的数据，我们每次先去读取data.json中 的数据取出，放到数组中去，然后再把本次提交的数据push到数据去，这样就不会覆盖。		
		fs.readFile(path.join(__dirname,'data.json'),'utf8',(err,data)=>{
//			因为第一次访问网站,data.json文件本身不存在,所以肯定是 有错误的,但是这种错误,我们并不认为是网站出错了,所以不需要抛出异常.
			if(err && err!=="ENOENT"){
				throw err;
			}			
			var list = JSON.parse(data || '[]'); //防止没有数据报错，因为json.parse转换null 或者 undefined会报错。	
			
			list.push(urlobj.query);
		// 把list数组中的数据写入到data.json中
		fs.writeFile(path.join(__dirname,'data.json'),JSON.stringify(list),(err)=>{
			if(err){
				throw err;
			}
			
			// 设置响应报文头，通过响应报文头告诉浏览器，执行一次页面跳转操作
			
			// 3 跳转到新闻列表页
			
			// 重定向
			res.statusCode = 302;
			res.statusMessage='Found';
			res.setHeader("Location",'index.html');
			res.end();//每一个请求都要结束响应
		});	
		})		
	}else{
		//		把所有要访问的页面都统一放在一个文件夹下面
		var viewsDir = path.join(__dirname,'views');
		var filename = path.join(viewsDir,req.url);
		res.render(filename);	
	}
	
}).listen(7070,function(){
	console.log("http://localhost:7070")
})


//封装一个render函数
//function render(filename,res){
//	fs.readFile(filename,(err,data)=>{
//		if(err){
//			return res.end('404 Not Found!');		
//		}else{
//			res.setHeader('Content-type',mime.getType(filename));
//			res.end(data);
//		}
//	})	
//}
